package com.example.demo.common;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DELL
 * Date: 2023-06-13
 * Time: 16:28
 */
@Component
public class TimerTaskTools {

    /**
     * 线程不安全版本
     */
//    // 记录验证码和创建时间的Map
//    public  Map<Integer, Long> codeTimeMap = new HashMap<>();
//
//    public void saveCode(Integer code) {
//        codeTimeMap.put(code, System.currentTimeMillis());
//    }
//
//
//    // 检查验证码是否过期
//    @Scheduled(fixedRate = 1000)
//    public synchronized void checkCodeExpired() {
//        long currentTimeMillis = System.currentTimeMillis();
//        List<Integer> expiredCodes = new ArrayList<>();
//        for (Integer code : codeTimeMap.keySet()) {
//            // 获取验证码的创建时间
//            long createTimeMillis = codeTimeMap.get(code);
//            if (currentTimeMillis - createTimeMillis > 30000) {
//                expiredCodes.add(code); // 加入要
//            }
//        }
//        // 移除所有验证码
//        for (Integer code : expiredCodes) {
//            codeTimeMap.remove(code);
//        }
//    }
//
//    // 获取 codeTimeMap 属性的方法
//    public Map<Integer, Long> getCodeTimeMap() {
//        return codeTimeMap;
//    }


    /**
     * 线程安全版本
     */
    private Map<Integer, Long> codeTimeMap = new ConcurrentHashMap<>();

    public void saveCode(Integer code) {
        codeTimeMap.put(code, System.currentTimeMillis());
    }

    @Scheduled(fixedRate = 1000)
    public synchronized void checkCodeExpired() {
        long currentTimeMillis = System.currentTimeMillis();
        List<Integer> expiredCodes = new ArrayList<>();
        for (Integer code : codeTimeMap.keySet()) {
            long createTimeMillis = codeTimeMap.get(code);
            if (currentTimeMillis - createTimeMillis > 3 * 60000) {
                expiredCodes.add(code);
            }
        }
        for (Integer code : expiredCodes) {
            codeTimeMap.remove(code);
        }
    }

    public Map<Integer, Long> getCodeTimeMap() {
        return codeTimeMap;
    }

//    public void checkCodeExpired() {
//        Timer timer = new Timer();
//        timer.schedule(new TimerTask() {
//            @Override
//            public void run() {
//                long currentTimeMillis = System.currentTimeMillis();
//                for (Integer code : codeTimeMap.keySet()) {
//                    long createTimeMillis = codeTimeMap.get(code);
//                    if (currentTimeMillis - createTimeMillis > 60000) { // 180000 毫秒即3分钟
//                        // 如果验证码已经过期，则将其标记为失效
//                        codeTimeMap.remove(code);
//                    }
//                }
//            }
//        }, 1000, 1000); // 每过一秒执行一次
//    }


}
